# -*- coding: utf-8 -*-
# @File     : handle_loguru.py.py
# @Project  : letCodeCase
# @Author   : 熊剑文
# @Time     : 2024/9/5 10:55:03
# @Copyright: 江西博微新技术有限公司
pass

"""
模块描述：
    
"""
import logging
from configparser import ConfigParser
from loguru import logger
from utils.handle_path import LetCodePath
from time import strftime


class PropogateHandler(logging.Handler):
    def emit(self, record):
        logging.getLogger(record.name).handle(record)


class MyLog():
    __instance = None  # 单例实现
    __call_flag = True  # 控制init调用，如果调用过就不再调用

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super().__new__(cls)
        return cls.__instance

    # def __init__(self):
    def get_log(self):
        if self.__call_flag:  # 看是否调用过
            curdate = strftime('%Y%m%d_%H%M%S')
            cfg = ConfigParser()  # 标准库ConfigParser读取ini文件
            cfg.read(LetCodePath.configs_path / 'loguru.ini', encoding='utf-8')
            logger.remove(handler_id=None)  # 关闭console输出
            logger.add(LetCodePath.logs_path / f'AutoPolly61_{curdate}.log',  # 日志存放位置
                       retention=cfg.get('log', 'retention'),  # 清理
                       # cfg.get(section,key)==>value
                       rotation=cfg.get('log', 'rotation'),  # 循环 达到指定大小后建立新的日志
                       format=cfg.get('log', 'format'),  # 日志输出格式
                       # compression=cfg.get('log', 'compression'),  # 日志压缩格式
                       compression='zip',
                       level=cfg.get('log', 'level'))  # 日志级别
            # logger.add(PropogateHandler(),
            #            format="{time:YYYY-MM-DD at HH:mm:ss} | {message}")
            self.__call_flag = False  # 如果调用过就置为False
        return logger


log = MyLog().get_log()

if __name__ == '__main__':
    test_flag = 1
    if test_flag == 2:
        for i in range(200):
            log.error('helloworld')
    if test_flag == 1:
        log.error('李四')
        from time import sleep

        sleep(2)
        log.error('张三')